﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;

namespace Formation_Entreprise
{
    public partial class frmRapportPeriode : Form
    {
        public frmRapportPeriode()
        {
            InitializeComponent();
        }

        private void btnAnnuler_Click(object sender, EventArgs e)
        {
            //Fermeture du formulaire
            this.Close();
        }

        private void btnRapport_Click(object sender, EventArgs e)
        {
            DateTime dateDebut = new DateTime(this.dtpDebut.Value.Year, this.dtpDebut.Value.Month, this.dtpDebut.Value.Day);
            DateTime dateFin = new DateTime(this.dtpFin.Value.Year, this.dtpFin.Value.Month, this.dtpFin.Value.Day);

            if (DateTime.Compare(dateDebut, dateFin) < 0)
            {
                // Création de la variable compteur total
                double total = 0;
                int currentCell = 3;

                // Création de l'objet "CreationExcelDocument" &
                // obtention des deux dates inscrites dans la formulaire
                CreateExcelDocument CED = new CreateExcelDocument();

                // Creation d'un Dictionnaire avec toutes les données nécessaire
                // comprise entre les deux dates
                Dictionary<int, double> dic = Rapports.ObtenirRapportPeriodique(dateDebut, dateFin);

                // ÉCRITURE de l'entête dans le fichier Excel
                CED.createCell(1, 1, "Rapport financier du " + dateDebut.ToString("dd/MM/yyyy") + " au " + dateFin.ToString("dd/MM/yyyy"), "A1", "D1", 4, "GRAY", true, 10, "");
                CED.createCell(2, 1, "Conseiller", "A2", "B2", 2, "GRAY", true, 10, "");
                CED.createCell(2, 3, "Montant ($)", "C2", "D2", 2, "GRAY", true, 10, "");

                // POUR CHAQUE Conseiller
                foreach (KeyValuePair<int, double> p in dic)
                {
                    string nom = getNomConseiller(p.Key);
                    // ÉCRITURE d'une cellule dans le document Excel et écriture du montant
                    // dans la cellule adjascente
                    CED.createCell(currentCell, 1, nom, "A" + currentCell, "B" + currentCell, 2, "", true, 10, "");
                    CED.createCell(currentCell, 3, p.Value.ToString("$#,##0.00"), "C" + currentCell, "D" + currentCell, 2, "", true, 10, "");

                    currentCell++;
                    total += p.Value;
                }

                // ÉCRITURE de la ligne finale avec le grand total
                CED.createCell(currentCell, 1, "Total:", "A" + currentCell, "B" + currentCell, 2, "GRAY", true, 10, "");
                CED.createCell(currentCell, 3, total.ToString("$#,##0.00"), "C" + currentCell, "D" + currentCell, 2, "GRAY", true, 10, "");
            }
            else { MessageBox.Show("La date de début doit être avant la date de fin du rapport."); }
        }

        private string getNomConseiller(int numero)
        {
            // Sélection du nom du conseiller
            string query = "SELECT Nom FROM Conseiller WHERE NoConseiller = @p1";

            // Connection à la base de donnée et Associer la requete avec la connection
            OleDbConnection oledbcn = ConnectionBD.ObtenirConnection();
            OleDbCommand oledbcmd = new OleDbCommand(query, oledbcn);

            // Parametres
            oledbcmd.Parameters.AddWithValue("@p1", numero);

            // Initialisation du reader
            OleDbDataReader reader = null;

            // Ouvrir la conection et exécuter la requete
            oledbcn.Open();
            reader = oledbcmd.ExecuteReader();

            string name = string.Empty;

            while (reader.Read())
            {
                name = Convert.ToString(reader["Nom"]);
            }

            return name;
        }
    }
}
